/******************************************************************************
 * FileName:   i2c.h
 * Purpose:    Librer�a de funciones para el m�dulo TWI en modo I2C Master
 * Processor:  ATmel AVR con m�dulo TWI
 * Compiler:   AVR IAR C y AVR GCC (WinAVR)
 * Author:     Shawn Johnson. http://www.cursomicros.com.
 *
 * Copyright (C) 2008 - 2013 Shawn Johnson. All rights reserved.
 *
 * License:    Se permiten el uso y la redistribuci�n de este c�digo con 
 *             modificaciones o sin ellas, siempre que se mantengan esta 
 *             licencia y las notas de autor y copyright de arriba.
--
Modificado por Rodrigo Garcia, mayo 2015, <strysg@riseup.net>
 *****************************************************************************/

#ifndef I2C_H
#define I2C_H

#include <avr/io.h>

//****************************************************************************
//    CONFIGURACI�N DE LA FRECUENCIA DEL BUS I2C
//****************************************************************************
#ifndef I2C_BAUD
/* Define la velocidad de transmisi�n del m�dulo TWI (en bits/segundo), si
 * a�n no ha sido definida.
 */
#define I2C_BAUD  100000UL  // 100khz. Valor por defecto
#endif

#ifndef F_CPU

#define F_CPU 8000000UL // 8Mhz
#endif

#ifndef I2C_MAX_WAIT

#define I2C_MAX_WAIT 200 // numero maximo de ciclos a esperar al realizar ciertas operaciones twi/i2c
#endif

//****************************************************************************
//    PROTOTIPOS DE FUNCIONES
//****************************************************************************

void i2c_init(void);

/* Nota.- Muchas funciones usan I2C_MAX_WAIT para controlar el tiempo maximo de espera para realizar la operacion. */
char i2c_start(void); // envia START 
void i2c_stop(void); // envia STOP  y espera respuesta

// devuelve 1 si hay error, 0 sin problemas
char i2c_write(char data); // envia un byte, recibe ACK/NACK

// devuelve TWDR (buffer i2c)
char i2c_read(char ack); // Recibe un byte y ACK o NACK, la lectura se hace por un tiempo maximo de mwt iteraciones

#define i2c_restart i2c_start

#endif
